#include "BlockQueue.hpp"


void *Producer(void *args)
{
    BlockQueue<int>* bq=static_cast<BlockQueue<int>*>(args);

    int data=0;

    // 生产数据
    while(true)
    {
        bq->push(data);
        std::cout<<" 生产数据: "<<data<<std::endl;
        data++;

        //sleep(1);
    }

}

void *Consumer(void *args)
{
    BlockQueue<int>* bq=static_cast<BlockQueue<int>*>(args);

    // 消费数据
    while(true)
    {
        int data=0;
        bq->pop(&data);
        std::cout<<" 消费数据: "<<data<<std::endl;
        sleep(1);
    }

}

int main(int,char**,char**)
{
    pthread_t ptid;
    pthread_t ctid;

    // 阻塞队列
    BlockQueue<int> *bq=new BlockQueue<int>();

    // 创建线程
    pthread_create(&ptid,nullptr,Producer,(void*)bq);
    pthread_create(&ptid,nullptr,Consumer,(void*)bq);

    // 线程等待
    pthread_join(ptid,nullptr);
    pthread_join(ctid,nullptr);

    delete bq;

    return 0;
}